[問題] 未設定物件變數或 With 區塊變數

看板Office作者 (一 身 是 宅)時間3年前 (2020/12/18 23:12), 3年前編輯推噓0(0044)
留言44則, 2人參與, 3年前最新討論串1/1
(若是和其他不同軟體互動之問題 請記得一併填寫) 軟體:excel 版本:2019 Public Function test1(PROD As String) As Integer Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction Dim ws As Worksheet: Set ws = Sheets("Sheets1") Dim rngLook As Range: Set rngLook = ws.Range("A1:B10") Dim target_name As String Dim value As String On Error Resume Next value = wsFunc.VLookup(PROD, rngLook, 2, False) test1 = value End Function 一直卡在黃字 陣列索引超出範圍 我是想寫一個變數帶入 如果是 蘋果 值=10 香蕉 值=20 前面會抓一個字串 fruit = 香蕉 Dim retVal As Integer retVal = test1("fruit") 不知道該怎麼改 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.142.50.83 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1608304339.A.B7C.html

12/18 23:18, 3年前 , 1F
檢查是否有Sheets1這個工作表名稱的工作表
12/18 23:18, 1F

12/18 23:22, 3年前 , 2F
有喔 我還特地複製貼上工作表的名稱
12/18 23:22, 2F

12/18 23:24, 3年前 , 3F
確定有一樣嗎?來,來看
12/18 23:24, 3F

12/18 23:24, 3年前 , 4F

12/18 23:25, 3年前 , 5F
工作表名稱Sheets1 多個空格就會回傳陣列索引超出範圍
12/18 23:25, 5F

12/18 23:25, 3年前 , 6F
???????
12/18 23:25, 6F

12/18 23:25, 3年前 , 7F
都一致時有錯嗎? https://i.imgur.com/4rSpYIm.jpg
12/18 23:25, 7F

12/18 23:26, 3年前 , 8F
沒,執行上沒問題
12/18 23:26, 8F

12/18 23:26, 3年前 , 9F
多一個空白字元?
12/18 23:26, 9F

12/18 23:26, 3年前 , 10F
有沒有這個工作表名稱,這個工作表名稱有沒有一致
12/18 23:26, 10F

12/18 23:27, 3年前 , 11F
是的,我回文就是再說為什麼會產生這個錯誤
12/18 23:27, 11F

12/18 23:27, 3年前 , 12F
多一個空白字元不一致時就會產生
12/18 23:27, 12F

12/18 23:28, 3年前 , 13F
有沒有這個可能,原po可以自行檢查看看
12/18 23:28, 13F
應該不是出在工作表名稱的問題 這行如果直接打入字串 retVal = test1("香蕉") retVal 就會跑出 20 表示有對照到表格 但是 retVal = test1("fruit") 就會錯誤 ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/18/2020 23:30:29

12/18 23:32, 3年前 , 14F
什麼錯誤,無法回傳正確資料還是錯誤訊息
12/18 23:32, 14F

12/18 23:48, 3年前 , 15F
錯誤如果是無法回傳正確資料
12/18 23:48, 15F

12/18 23:48, 3年前 , 16F
fruit = 香蕉 (香蕉前後要有雙引號),下方test1括號內的不
12/18 23:48, 16F

12/18 23:48, 3年前 , 17F
用雙引號
12/18 23:48, 17F

12/18 23:48, 3年前 , 18F
出現引數型態不符的話,宣告一下fruit為字串
12/18 23:48, 18F
https://imgur.com/HyeFsiJ
https://imgur.com/b20XEXm
※ 編輯: hmsboy (220.142.50.83 臺灣), 12/18/2020 23:53:09

12/18 23:55, 3年前 , 19F
要不要看一下我回文12/18 23:48寫的
12/18 23:55, 19F

12/18 23:58, 3年前 , 20F
下方test1括號內的不用雙引號,結果你回文連結內還是要以
12/18 23:58, 20F

12/18 23:58, 3年前 , 21F
test1("fruit"),我也沒辦法
12/18 23:58, 21F
https://imgur.com/ru0ZL2I
這樣對嗎? ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/19/2020 00:00:21

12/19 00:04, 3年前 , 22F
以這個舉例來看回傳正確要的值,那就是對的
12/19 00:04, 22F
一開始以為 跑 fruit = "香蕉" fruit 有抓到 香蕉 字串 去改test1("fruit")這段 改來改去 像是 test1(CStr(fruit)) 都無法再跑下去 關鍵應該是缺少 宣告字串 Dim fruit As String ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/19/2020 00:12:41

12/19 00:15, 3年前 , 23F
那內文寫的"一直卡在黃字 陣列索引超出範圍"呢?
12/19 00:15, 23F

12/19 00:15, 3年前 , 24F
缺少宣告這個變數出現的錯誤訊息,我回文12/18 23:48有寫
12/19 00:15, 24F

12/19 00:15, 3年前 , 25F
是引數型態不符,並不是"陣列索引超出範圍"
12/19 00:15, 25F
文件有點肥大 我家工程師跑路 我半桶的 能私下傳給你看嗎? ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/19/2020 00:30:24

12/19 00:36, 3年前 , 26F
不用私下傳給我。上傳雲端,開權限,貼連結。不限我回覆原
12/19 00:36, 26F

12/19 00:36, 3年前 , 27F
po
12/19 00:36, 27F
https://reurl.cc/n0ak1n https://reurl.cc/ygd2r6 工作表_入庫記錄 > 按鈕_庫存匯入>庫存明細.xlsx ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/19/2020 00:53:33

12/19 00:59, 3年前 , 28F
這就是我第一筆12/18 23:18回文寫的是否有這個工作表名稱
12/19 00:59, 28F

12/19 00:59, 3年前 , 29F
的工作表,開啟後作用活頁簿在庫存明細.xlsx這個上,這個
12/19 00:59, 29F

12/19 00:59, 3年前 , 30F
活頁簿內就沒有"入庫記錄"這個工作表
12/19 00:59, 30F

12/19 01:03, 3年前 , 31F
那要指定的話巨集這個活頁簿內的入庫記錄,workbooks("完
12/19 01:03, 31F

12/19 01:03, 3年前 , 32F
整檔名").sheets(...)或是thisworkbook.sheets(..)
12/19 01:03, 32F

12/19 01:06, 3年前 , 33F
加上後,執行就沒有"陣列索引超出範圍"錯誤訊息,a:g欄內
12/19 01:06, 33F

12/19 01:06, 3年前 , 34F
也有資料寫入
12/19 01:06, 34F

12/19 01:06, 3年前 , 35F
成功了 Dim ws As Worksheet: Set ws = Sheets("入庫記錄") ↓↓ Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("入庫記錄") 為什麼差這個就跑不動? 他迷路是跑去 庫存明細.xlsx 的意思嗎 ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/19/2020 01:16:50 睡前再問一個 麻煩你了 同樣是主檔 工作表 "匯單" 如果第二列 沒資料空白 "樞紐" 抓不到資料 要怎麼解決 ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/19/2020 01:21:31

12/19 01:29, 3年前 , 36F
解讀說是迷路就看原po。原因是使用中的活頁簿為庫存明細.
12/19 01:29, 36F

12/19 01:29, 3年前 , 37F
xlsx,該活頁簿並無入庫記錄這個工作表的緣故
12/19 01:29, 37F
這個有了解 因為沒有指定 ThisWorkbook 開了 庫存.xlsx 導致程序上 是跑在 庫存.xlsx ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/19/2020 01:41:39 題外話 我家工程師跑路 留了很有趣的東西 Public Const limitD As Date = "2020/12/15" Public Function login() login = IIf(Date >= limitD, False, True) End Function 然後 每一個 Sub xxx() 下面寫上 If login() = False Then Exit Sub 設定使用期限 很幼稚 ※ 編輯: hmsboy (220.142.50.83 臺灣), 12/19/2020 01:46:08

12/19 01:51, 3年前 , 38F
樞紐方面,看工作表"訂單"的c欄到貨日,儲存格c2=IF(匯單!
12/19 01:51, 38F

12/19 01:51, 3年前 , 39F
B2="","",匯單!B2)
12/19 01:51, 39F

12/19 01:51, 3年前 , 40F
工作表"匯單",儲存格b2沒有資料就回傳空字串
12/19 01:51, 40F

12/19 01:51, 3年前 , 41F
程序"樞紐重整"到貨日的日期就會以空字串
12/19 01:51, 41F

12/19 01:51, 3年前 , 42F
所以要改的話,將工作表"訂單"的c欄到貨日,找第二列往下
12/19 01:51, 42F

12/19 01:51, 3年前 , 43F
第一筆有資料,這用match,對應b欄預交日期就看要用index
12/19 01:51, 43F

12/19 01:51, 3年前 , 44F
、offset或indirect
12/19 01:51, 44F
B2~B17 每次會隨機產生空白或日期 但至少有一個是日期 我寫成這樣 =OFFSET(匯單!B2,SMALL(IF(匯單!B2:B17>0,ROW(匯單!B2:B17)-2,""),ROW(1:1)),) 只要B2~B17中間有日期 抓日期資料 ※ 編輯: hmsboy (59.120.114.65 臺灣), 12/19/2020 14:59:27
文章代碼(AID): #1VtCRJjy (Office)