Board logo

標題: 數字名稱工作表 [打印本頁]

作者: pideo    時間: 2015-11-1 23:59     標題: 數字名稱工作表

小弟目前碰到一個問題
就是小弟想使用vba自動新增不定數量的工作表
而且工作表的名稱為數字,並且在建立好該工作表後在該工作表之A1儲存格填入資料
小弟以下列寫法一直有問題
For i =1 to num
      uRng = Workbooks("a.xlsm").Worksheets("代號").cell(i,1) <<<<<<<這邊的儲存格放的都是數字例如1111、132、58752
      Workbooks("a.xlsm").Worksheets.Add.Name = uRng
     Workbooks("a.xlsm").Worksheets("uRng").cell(1,1) = 某些資料 <<<<<這一段一直顯示有問題
     將上一段改成Workbooks("a.xlsm").Worksheets(uRng).cell(1,1) = 某些資料 <<<<<<這樣還是錯
     如果改成 Workbooks("a.xlsm").Worksheets(str(uRng)).cell(1,1) = 某些資料<<<<<<<這樣還是錯@@~~~~
Next

請問各位大大小弟到底哪邊弄錯了
懇請指導謝謝
作者: n7822123    時間: 2015-11-2 01:44

回復 1# pideo


你的問題點很多,尤其是資料型態的部份

1.你的uRng  是一個變數名稱,如果打成"uRng",電腦就會找這個名稱的工作表,顯然是找不到

2.str(uRng)..............只有 才能用str這個函數,例如1111轉換成"1111",但是你的uRng是變數名稱............

3.正確寫法是:Workbooks("a.xlsm").Worksheets(uRng).cells(1,1)    你少寫了S

4.寫程式不先定義資料型態是很不好的習慣,你的uRng 裡面裝的值是數字,假設uRng=5,所以Worksheets(uRng),代表電腦去找第5個工作表

所以請補上Dim Urng As String

更正程式如下,先決條件你的num要有值
  1. Dim Urng As String
  2. For i = 1 To num
  3.   Urng = Workbooks("a.xlsm").Worksheets("代號").Cells(i, 1)
  4.   Workbooks("a.xlsm").Worksheets.Add.Name = Urng
  5.   Workbooks("a.xlsm").Worksheets(Urng).Cells(1, 1) = "某些資料"
  6. Next
複製代碼

作者: n7822123    時間: 2015-11-2 01:59

回復 2# n7822123


更正我第2項說法

2.Worksheets(str(uRng)).......................只有數值 才能用str這個函數,例如1111轉換成"1111",但是你的uRng是變數名稱............

你把str函數改成Cstr 就行了,記住str函數裡面的引數只能是數值,不能是變數名稱

更正如下:
  1. For i = 1 To num
  2.   Urng = Workbooks("a.xlsm").Worksheets("代號").Cells(i, 1)
  3.   Workbooks("a.xlsm").Worksheets.Add.Name = Urng
  4.   Workbooks("a.xlsm").Sheets(CStr(Urng)).Cells(1, 1) = "某些資料"
  5. Next
複製代碼

作者: n7822123    時間: 2015-11-2 02:30

本帖最後由 n7822123 於 2015-11-2 02:32 編輯

回復 3# n7822123


抱歉,我說錯啦

剛剛去查了一下str 這個函數,他前面會保留一個字符用來判斷正負號,裡面是可以放變數的

str(-1234)="-1234"   這沒爭議,但是

str(1234)=" 1234"  前面會有一個空格不是"1234"

所以結論就是......str還是少用吧..........我都用Cstr

[attach]22306[/attach]
作者: pideo    時間: 2015-11-2 18:46

這邊忘了打上s抱歉
感謝大大的指導
使用了Cstr問題就解決了
小弟受益良多
感謝
作者: GBKEE    時間: 2015-11-3 07:23

本帖最後由 GBKEE 於 2015-11-3 07:27 編輯

回復 5# pideo
  1. 'Worksheets(索引值) ->數字: 依活頁簿上工作表排列第一個到最後一個
  2. 'Worksheets(文字)   ->這活頁簿上工作表以這字串命名的工作表
  3. Option Explicit
  4. Sub Ex()
  5.     Dim i As Integer , num As Integer, uRng As String
  6.     With Workbooks("a.xlsm")
  7.         For i = 1 To num
  8.             uRng = .Worksheets("代號").Cells(i, 1).Text  '儲存格的文字
  9.             .Worksheets.Add.Name = uRng
  10.             .Worksheets(uRng).Cells(1, 1) = 某些資料
  11.             
  12.         Next
  13.     End With
  14. End Sub
複製代碼

作者: 准提部林    時間: 2015-11-3 09:38

Sheets(uRng & "").Cells(1, 1) = 某些資料




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)