2011-04-21 32 views
5

今天,我在wikipedia上瀏覽了一些隨機的geek-stuff文章,以便獲得我每天所用的無用知識。我偶然發現了一些quines,它們是打印自己的源代碼的程序。我發現這是一個讓我的大腦受傷的好方法,所以我開始在VBA上研究一個quine。我有兩個很好的理由:缺少的quines:Visual Basic(用於應用程序)

  1. 我找不到VBA編寫的一個奎因
  2. VBA鼓勵你寫代碼的尷尬,讓您的大腦受到傷害

這裏是我的傑作:

Sub q() 
c = "Sub q();c = #;Debug.Print Replace(Replace(c, Chr(59), vbNewLine), Chr(35), Chr(34) & c & Chr(34));End Sub" 
Debug.Print Replace(Replace(c, Chr(59), vbNewLine), Chr(35), Chr(34) & c & Chr(34)) 
End Sub 

我的挑戰:你能否縮短它(甚至更加笨拙)?

回答

1

我不知道是否有人讀這個線程anomore但這裏有一個更短的一個,基於das_weezul的奎因。它獨立於「Option Explicit」(與das_weezul不同),獨立於您正在使用的Office應用程序(即Excel,Access,Word等) - 與Alex K's不同。使用它在即時窗口(Ctrl + G):

c="c=#:?replace(c,chr(35),chr(34) &c &chr(34))":?replace(c,chr(35),chr(34) &c &chr(34)) 
+0

你甚至可以使一個四個字符短:c =「c =#:a = chr(34):?replace(c,chr(35),a&c&a)」:a = chr(34):?replace(c,chr(35),a &c&a)' – Dorian 2015-07-08 09:27:15

+0

我還在讀這篇文章:D很高興看到這個主題迴歸生活。該解決方案看起來非常光滑! – 2015-07-15 12:52:18

+0

對不起@亞歷克K,多利安奪取寶座:D – 2015-07-15 12:56:37

5

如何

Sub q() '//in mdl1 
Debug.Print Workbooks(1).VBProject.VBComponents(5).CodeModule.Lines(1, 3) 
End Sub 
+0

我知道有人會拿出什麼;)+2長度,-1表示良好的可讀性;) – 2011-04-21 13:27:59