2015-12-02 106 views
0

我想從使用Len()函數的變量中獲取字符數,但vba說它不能識別它。所以我想知道我的錯誤是什麼,我該如何解決?計算字符串中的字符數

Dim y As Long 
Dim counthidden As Byte 
Dim nbcharac As Long 
Dim espace As Long 

'boucle sur toutes les diapos à partir de la 2e 
For y = 3 To ActivePresentation.Slides.Count 
Set Diapo = ActivePresentation.Slides(y) 

If Diapo.SlideShowTransition.Hidden = msoTrue Then 
counthidden = counthidden + 1 
End If 
'si la diapo a un titre 
If Diapo.Shapes.HasTitle And Diapo.SlideShowTransition.Hidden = msoFalse Then 
Set titre = Diapo.Shapes.Title 
nbcharac = Len(titre) 
espace = 90 - nbcharac 
texte_ajout = texte_ajout & titre.TextFrame. _ 
TextRange.Text & space(espace) & Format(y - counthidden, "0") & vbCrLf 
End If 

Next y 

預先感謝您的幫助 (也是,如果你知道一種可以放入一個PowerPoint頁面的字符數,但我可以測試爲)

+2

'Chr(espace)'你應該得到什麼? 。我想你想要做'space(空格)' – milevyo

+0

@milevyo我想寫在幻燈片的右側幻燈片頁面的數量(如目錄)。我嘗試了vbTab,但我沒有得到數字對齊。 chr(espace)應該在標題和頁碼之間加上空格(或者我認爲)。 錯誤發生在那個chr()/ space()混淆之前,所以它沒有讀到那麼遠。 (這個版本是對之前有效的東西的修改,頁碼在標題之前) –

+0

我很驚訝這個編譯/運行。 'titre'應該是一個字符串,這意味着'set'應該會引發錯誤。我認爲你想要:'titre = Diapo.Shapes.Title' *沒有'set' – Hambone

回答

2

由於tietreShape對象,而不是一個字符串,Len將無法​​正常工作。你需要從得到的形狀文本來計算長度,是這樣的:

Set titre = Diapo.Shapes.Title 
nbcharac = Len(titre.TextFrame.TextRange.Text) 

可以通過在你的模塊的頂部使用Option Explicit防止許多這樣的問題,這將迫使你明確地聲明所有變量,例如tietreDiapo(一個Slide對象),並在編譯時顯示許多問題,而不是在運行時顯示。

+0

我可以做類似的事情嗎?但是不能獲得長度,我可以得到字符串的大小(以px或mm爲單位)? –

+0

你是指字體大小?或者文本框的大小? –

+0

我的意思是文本框內的字符串的寬度。我知道「a」的寬度與「l」不一樣。所以「azerty」和「wwpmmm」的寬度不一樣,儘管它們都有6個字符。在我的演示文稿中,文本框的大小設置爲幻燈片的寬度。我不知道我是否以正確的方式解釋它,所以,對此抱歉。 –