我想在Excel 2003(不是我選擇的版本)中編寫一個VBA腳本,將工作表上的預定義範圍劃分爲十個命名範圍。工作表名稱是「paste_data」,我想限制腳本的單元格的「塊」爲A4:AO111。有時候,當我運行腳本時,它可以工作,但在其他時候,它似乎將有效的起始單元格從A4轉移到另一個單元格。這裏是一個不好的結果(對不起,因爲我是新的,我不能張貼圖片)爲例:在代碼中分配的地址與命名範圍和生成的命名範圍地址之間的斷開
命名範圍table.emergency.count是指範圍V6:當它應該是指範圍AO25 V4:AO23。
我的代碼是在這裏:
Sub tables_assign()
Dim j As Integer
Dim range_ref, range_name, rref As String
Dim tbles(1 To 10) As String
Dim rw1, rw2 As Integer
'##########################################################################################
'CREATION AND NAMING OF TABLES
'##########################################################################################
tbles(1) = "table.emergency.score": tbles(2) = "table.emergency.count": tbles(3) = "table.eol.score": tbles(4) = "table.eol.count": tbles(5) = "table.inpatient.score": tbles(6) = "table.inpatient.count": tbles(7) = "table.outpatient.score": tbles(8) = "table.outpatient.count": tbles(9) = "table.sds.score": tbles(10) = "table.sds.count"
For j = 1 To 10
If j Mod 2 <> 0 Then
If j = 1 Then
rw1 = 4
rw2 = 23
Else
rw1 = 4 + 22 * Application.WorksheetFunction.Ceiling((j/2 - 1), 1)
rw2 = 23 + 22 * Application.WorksheetFunction.Ceiling((j/2 - 1), 1)
End If
rref = Trim(Application.WorksheetFunction.Substitute("=paste_data!A" & Str(rw1) & ":T" & Str(rw2), " ", ""))
ActiveWorkbook.Names.Add tbles(j), rref
Else
If j = 2 Then
rw1 = 4
rw2 = 23
Else
rw1 = 4 + 22 * (j/2 - 1)
rw2 = 23 + 22 * (j/2 - 1)
End If
rref = Trim(Application.WorksheetFunction.Substitute("=paste_data!V" & Str(rw1) & ":AO" & Str(rw2), " ", ""))
ActiveWorkbook.Names.Add tbles(j), rref
End If
Next j
End Sub
有沒有人有一個想法,爲什麼會發生這種情況?我的直覺是工作表的「usedrange」是罪魁禍首。
你在哪裏使用「UsedRange」?你的程序應該做什麼?總是命名範圍(「V4:AO23」)具有相同名稱(table.emergency.score,table.emergency.count等)? – CaBieberach 2011-02-15 19:22:03
@CaBieberach:我的代碼中沒有明確使用UsedRange,但是我的初始(不正確)預感是我以某種方式更改了工作表的UsedRange,這影響了我命名的範圍的地址。我(在我看來)在原始文章中清楚地陳述了我的程序的作用。其目的是允許用戶將數據粘貼到分區中,並通過單擊按鈕來創建命名範圍。 – Jubbles 2011-02-15 19:52:49