1
Private Sub Submit_Click()
Application.ScreenUpdating = False

Dim rangeForCode As range, rngLookupRange As range

Dim row As Integer, stock As Integer
Dim result As Integer
Dim drugCodePC As Integer
Dim qty As Integer
Dim ws As Worksheet

drugCodePC = CInt(DrugCode2.Value)
qty = CInt(Quantity.Value)

'Populating the drug name
Set ws = Worksheets("Drug Record")
ws.Select

*Set rangeForCode = ws.range("DrugCodeInventory")*
row = Application.WorksheetFunction.Match(drugCodePC, rangeForCode, 1)
Set rngLookupRange = ws.range("Inventory")
stock = Application.WorksheetFunction.VLookup(drugCodePC, rngLookupRange, 3, False)
result = stock + qty
'MsgBox (row)
ws.Cells(row + 1, 3).Value = result

Application.ScreenUpdating = True
Unload PurchaseForm 
End Sub

これにより、「オブジェクト _worksheet のメソッド範囲が名前付き範囲に失敗しました」というエラーがスローされ続けます。**でエラーが発生します。名前付きの範囲と関係があることはわかっています。以前、セルの範囲を書いたときです。「A1:A215」 動作します。名前の範囲を確認しましたが、正しいようです。名前付き範囲の名前も正しいです。最初にワークブックをアクティブ化しようとしましたが、それでもエラーがスローされます。

名前付き範囲は次のとおりです。

= OFFSET(DrugCodeInventory!$A$2, 0, 0, COUNTA(DrugCodeInventory!$A:$A)-1,1)

ワークシートの最初の列のみを動的に選択したい。

4

2 に答える 2

0

これをイミディエイト ウィンドウで実行すると、機能しますか?

application.Goto Worksheets("Drug Record").range("DrugCodeInventory")

実行されない場合は、名前付き範囲を削除して、新しい範囲を作成してみてください。

また、コードのこのセクションを明示的に修飾してみてください。

Dim ws As Excel.Worksheet '<added full qualification here

drugCodePC = CInt(DrugCode2.Value)
qty = CInt(Quantity.Value)

'Populating the drug name
Set ws = Excel.thisworkbook.Worksheets("Drug Record") '<added full qualification here
ws.Select

*Set rangeForCode = ws.range("DrugCodeInventory")*
于 2013-03-23T20:03:57.023 に答える
0

名前範囲「DrugCodeInventory」が存在する場合に true を返す以下のisNameRngExist関数を使用してください。その後、さらに操作を続行できます。

Function isNameRngExist(myRng As String) As Boolean
    On Error Resume Next
    isNameRngExist = Len(ThisWorkbook.Names(TheName).Name) <> 0
End Function
于 2013-03-24T03:42:48.050 に答える