2015-10-14 8 views
0

У меня проблема с моим макросом. Я знаю его много кода (sry для этого), но я думаю, что это может быть полезно. Итак, основная вещь, которую я хочу сделать, - принять значение combobox и найти его на другом листе, чтобы получить цену, указанную в следующем столбце. легко до сих пор, но имя im, поиск которого не уникально в базе данных. один им в поисках только определяется неоспоримым частью правильного именованного диапазона (т.е. EngineMercedesDiesel)Excel VBA Named Range с динамическим созданным именем

Function getprice(Matrix As Range, name As String) 

Dim i As Integer 
Dim row As Variant 
Dim col As Variant 
Dim price As Variant 
'loop to finde inside the range the name im looking for 
For i = 1 To Matrix.Rows.Count 
    If Matrix.Cells(i, 1).Value = name Then 
     row = Matrix.Cells(i, 1).Address(RowAbsolute:=True) 
     col = Matrix.Cells(i, 1).Address(ColumnAbsolute:=True) 
     price = Tabelle2.Cells(row, col + 1).Value 
     Exit For 
Next 

getprice = price 

End Function 

Private Sub cbschaltung_Change() 

Dim go As Range 
Dim handle As String 

'from here it builds the name i.e. EngineMercedesDiesel an there is a Named range with the same titel outside VBA 

teil = Range("A4").Value 
hersteller = Range("B3").Value 
handle = cbschaltung.Value 

If checkboxel.Value = True Then 

    c = checkboxel.Caption 
    Set go = teil & hersteller & c 'storing to the variable go, here ocures the error 
    Tabelle3.Range("C4").Value = getprice(go, handle) 

ElseIf checkboxmech.Value = True Then 

    c = checkboxmech.Caption 
    Set go = teil & hersteller & c 
    Tabelle3.Range("C4").Value = getprice(go, handle) 

End If 

End Sub 

Я прыгаю вы можете помочь мне, и (надеюсь) у вас есть простой ответ для меня

+1

Вы можете передать правильный именованный диапазон в качестве другого аргумента в функцию? Если это так, я думаю, что код очень легко обновить в этом случае. –

+0

sry Я не понимаю, что вы имеете в виду под «другим аргументом»!? проблема в том, что даже если я набираю имя непосредственно в функцию, он также не работает, потому что он не знает, как это получается. – Quantum

+0

Я вижу, что вы получили свой ответ, но я предлагал передать имя диапазон в исправление. Поэтому вместо использования двух аргументов в «Матрице» и «имени» вы можете добавить третий аргумент для именованного диапазона. В любом случае, вы получили то, что вам нужно :) –

ответ

0

ок я сделал это наконец!

ElseIf checkboxmech.Value = True Then 

    c = checkboxmech.Caption 
    mname = teil & hersteller & c 
    Set go = Worksheets("Gruppendatenbank").Range(mname) 
    Tabelle3.Range("C4").Value = getprice(go, handle) 

это было immportant определить mname как вариант типа данных и определяют также рабочий лист моего диапазона. поблагодарить за помощь

statusupdate: resolved!

Смежные вопросы