Excel vba ошибка ambiguous name detected
Здравствуйте! Подскажите что нужно дописать чтоб не было конфликта двух обработчиков событий на одном листе
Здравствуйте! Подскажите что нужно дописать чтоб не было конфликта двух обработчиков событий на одном листе
[/vba] Автор - plohishДата добавления - 28.02.2015 в 08:06 plohish, поместите все в один обработчик. И уберите [vba]
[/vba]
C Вашим примером смогу подробнее написать.
[p.s.]Пожалуйста, оформите Ваш код! Мне пришлось копировать его в редактор VBA, чтобы прочитать.
plohish, поместите все в один обработчик. И уберите [vba][/vba]
C Вашим примером смогу подробнее написать.
[p.s.]Пожалуйста, оформите Ваш код! Мне пришлось копировать его в редактор VBA, чтобы прочитать. Manyasha
ЯД: 410013299366744 WM: R193491431804
[/vba]
C Вашим примером смогу подробнее написать.
[p.s.]Пожалуйста, оформите Ваш код! Мне пришлось копировать его в редактор VBA, чтобы прочитать. Автор - Manyasha
Дата добавления - 28.02.2015 в 08:52
Private Sub Worksheet_SelectionChange(ByVal Target As Range) [/vba]Вы не присваиваете значение этой переменной, она всегда будет False! (убрала из кода эту строчку, если будет нужна - добавьте сами)
Private Sub Worksheet_SelectionChange(ByVal Target As Range) [/vba]Вы не присваиваете значение этой переменной, она всегда будет False! (убрала из кода эту строчку, если будет нужна - добавьте сами)
Private Sub Worksheet_SelectionChange(ByVal Target As Range) должен быть один.
Полный код в файле. Автор - Manyasha
Дата добавления - 28.02.2015 в 09:51
ЯД: 410013299366744 WM: R193491431804
Некоторые наиболее часто встречающиеся ошибки:
1. Invalid outside procedure – неверная внешняя процедура;
2. Type mismatch – несоответствие типов;
3. Sub or Function not defined – процедура или функция не определена;
4. Next/For without For/Next – Next/For без For/Next: неправильная организация цикла;
5. If/EndIf without EndIf/If – If/EndIf без EndIf/If : неправильная запись условного оператора;
7. Object required – требуется объект;
8. Overflow – переполнение;
9. Subscript out of range– значение вне диапазона;
10. Duplicate declaration in current scope– двойное объявление в текущем диапазоне;
11. Division by zero – деление на ноль;
12. Statements and Labels invalid between Select Case and First Case –записи и метки неверны между Select Case и First Case;
13. Method or Data member not found – метод или часть данных не найдена;
14. Variable not defined – переменная не определена;
15. Invalid procedure call or argument – неправильный вызов процедуры или аргумент;
16. User-defined type not defined – пользовательский тип не определен;
17. Object doesn’t support this property or method – объект не поддерживает это свойство ли метод;
18. Ambiguous name detected: nameобъекта_событие – обнаружено неоднозначное имя;
19. Only comments may appear after End Sub, End Function, or End Property– только комментарии могут появляться после End Sub, End Function, или End Property;
20. Statement invalid outside Type Block– неверная запись вне блока.
Не нашли то, что искали? Воспользуйтесь поиском:
Отключите adBlock!
и обновите страницу (F5)
очень нужно
Идентификатор конфликтует с другим идентификатором или требует квалификации. The identifier conflicts with another identifier or requires qualification. Эта ошибка имеет следующие причины и способы решения: This error has the following causes and solutions:
Элементы с одинаковыми именами могут принадлежать нескольким объектам в одной и той же области видимости. More than one object in the same scope may have elements with the same name.
Квалифицируйте имя элемента, указывая имя объекта и точку. Qualify the element name by including the object name and a period. Пример: For example:
Идентификаторы уровня модуля и идентификаторы уровня проекта (имена модуля и имена связанных проектов) могут повторно использоваться в процедуре, хотя это усложняет сопровождение и отладку программы. Module-level identifiers and project-level identifiers (module names and referenced project names) may be reused in a procedure, although it makes programs harder to maintain and debug. Но, если нужно сослаться в одной процедуре на оба элемента, необходимо квалифицировать элемент с более широкой областью видимости. However, if you want to refer to both items in the same procedure, the item having wider scope must be qualified. Например, если переменная MyID объявлена на уровне модуля MyModule , а затем в модуле на уровне процедуры объявлена переменная с тем же именем, ссылки на переменную уровня модуля должны быть соответствующим образом квалифицированы: For example, if MyID is declared at the module level of MyModule , and then a procedure-level variable is declared with the same name in the module, references to the module-level variable must be appropriately qualified:
Идентификатор, объявленный на уровне модуля, конфликтует с именем процедуры. An identifier declared at module-level conflicts with a procedure name. Например, эта ошибка возникает, если переменная MyID объявлена на уровне модуля, а затем определена процедура с таким же именем: For example, this error occurs if the variable MyID is declared at module level, and then a procedure is defined with the same name:
В этом случае необходимо изменить можно из имен, так как квалификация с общим именем модуля не разрешит неоднозначность. In this case, you must change one of the names because qualification with a common module name would not resolve the ambiguity. Имена процедур по умолчанию являются общедоступными (Public), а имена переменных — частными (Private), если они не объявлены как Public. Procedure names are Public by default, but variable names are Private unless specified as Public.
Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh). For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).
Поддержка и обратная связь Support and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Ambiguous name detected
The identifier conflicts with another identifier or requires qualification. This error has the following causes and solutions:
More than one object in the same scope may have elements with the same name.
Qualify the element name by including the object name and a period. For example:
Module-level identifiers andproject-level identifiers (module names and referenced project names) may be reused in aprocedure, although it makes programs harder to maintain and debug. However, if you want to refer to both items in the same procedure, the item having wider scope must be qualified. For example, if MyID is declared at the module level of MyModule , and then a procedure-levelvariable is declared with the same name in the module, references to the module-level variable must be appropriately qualified:
- An identifier declared at module-level conflicts with a procedure name. For example, this error occurs if the variable MyID is declared at module level, and then a procedure is defined with the same name:
For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).
I have a user that can read documents from the document library but when he goes to checkout the file and open in Word, he gets a "ambiguous name detected:TmpDDe" Everything I have read about this says to delete the TmpDDE macro in Word but that does not help. I don't know if it is SP or the Office Suite. Anyone with any advice.
Ответы
Any way the user in question could try loggin in on another machine and performing the same action? Chris Caravajal: SharePoint Help
- Помечено в качестве ответа Xue-Mei Chang-MSFT Moderator 20 марта 2009 г. 1:47
Все ответы
Any way the user in question could try loggin in on another machine and performing the same action? Chris Caravajal: SharePoint Help
- Помечено в качестве ответа Xue-Mei Chang-MSFT Moderator 20 марта 2009 г. 1:47
the same thing happens to me. The way I get around it, is I right-click and save target as . still haven't resolved the problem yet.
This worked for me:
deleted normal.dot in (actually renamed to normal.dot.bad) and closed all programs that might use it (outlook)
C:\Documents and Settings\ userid \Application Data\Microsoft\Templates
and replaced with a good version from company templates.
I found this blog post, and the resolution worked for my users. It looks like the Normal.dot/Normal.dotm file is corrupted, so it needs to be re-created in the users AppData folder.
On a Windows 7 device the resolution would be:
Resolution:
Close all word documents.
Browse to: C:\Users\<user id>\AppData\Roaming\Microsoft\Templates\
Rename the Normal template file to anything you wish.
Open a blank word document and close it.
Check the C:\Users\<user id>\AppData\Roaming\Microsoft\Templates\ location again.
The Normal file will have been re-created.
Attempt to open a word document from the SharePoint site
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
Предыдущие ветки топика: Часть 1
Рекомендации:
Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь ) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.
Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
Рекомендуется к прочтению:
(для продвинутых)
(eng.) - тематический блог: советы по работе с Excel и прочие материалы
(eng.) - советы, трюки и уловки
(eng.) - весьма оживленный форум по Excel&VBA.
- сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
Как расположены эти 20 листов. Можно ли их отсортировать - например первые 20 зеленые, и дальше сод, скид, валют, примеч, адрес.
Dim arg As String
Dim i As Integer
For i = 1 To Sheets.Count
arg = Sheets(i).Name
If ActiveWorkbook.Sheets(i).Tab.ColorIndex = 14 Then нахожу зеленые листы
Sheets(Array("СОДЕРЖАНИЕ", "Скидки", arg, "Валюта", "Примечание", "Адрес")).Copy
Если вам макрос надо, то делайте обычную запись макроса.
Результат будет таким
if Range("D1").Value="cчастье" then
имя_макроса
End if
Private Sub CommandButton1_Click()
Dim Mas_Array(1 To 10) As Integer
Dim i As Integer
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
if Range("D1").Value="cчастье" then
имя_макроса
End if
End Sub
уже назнаю где искать
хочу получить все открытые Excel файлы и их наборами workbook и worksheet
getobject(,"excel.application") - получает только активное приложение, те не подходит
видел где то что через объект ROT (Running Object Table) можно перебрать
сделал такое на vbscript
Set WSHShell = CreateObject("WScript.Shell")
в результате возвращается коллекция из запущенных объектов Excel, где можно перебрать каджый и в каждом перебрать workbooks итп.
но неужели нет проще чего нить?
пример вызывается процедурой Example()
PS код на VB6
PPS взято отсюда
очень полезный ресурс оказался
Private Declare Function GetRunningObjectTable Lib "ole32.dll" (ByVal dwReserved As Long, pROT As Long) As Long
Private Declare Function CreateBindCtx Lib "ole32.dll" (ByVal dwReserved As Long, pBindCtx As Long) As Long
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)
Private Declare Sub OleInitialize Lib "ole32.dll" (pvReserved As Any)
Private Declare Sub OleUninitialize Lib "ole32.dll" ()
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, _
ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes As Long)
Private Declare Function PutMem2 Lib "msvbvm60" (ByVal pWORDDst As Long, ByVal NewValue As Long) As Long
Private Declare Function PutMem4 Lib "msvbvm60" (ByVal pDWORDDst As Long, ByVal NewValue As Long) As Long
Private Declare Function GetMem4 Lib "msvbvm60" (ByVal pDWORDSrc As Long, ByVal pDWORDDst As Long) As Long
Private Declare Function VarPtr Lib "msvbvm60" (var As Any) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function CopyStringA Lib "kernel32" Alias "lstrcpyA" (ByVal NewString As String, ByVal OldString As Long) As Long
Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal codepage As Long, ByVal dwFlags As Long, _
lpWideCharStr As Any, ByVal cchWideChar As Long, lpMultiByteStr As Any, ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Private Const GMEM_FIXED As Long = &H0
Private Const asmPUSH_imm32 As Byte = &H68
Private Const asmRET_imm16 As Byte = &HC2
Private Const asmRET_16 As Long = &H10C2&
Private Const asmCALL_rel32 As Byte = &HE8
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Sub Example()
Dim AllExcelApps As Collection, ExcelApp As Application, wb As Workbook, Pid As Long
Set AllExcelApps = GetAllInstances
If Not AllExcelApps Is Nothing Then
For Each ExcelApp In AllExcelApps
GetWindowThreadProcessId ExcelApp.hwnd, Pid
Debug.Print ExcelApp.Caption & ", Process & Pid
For Each wb In ExcelApp.Workbooks
Debug.Print " " & wb.Name
Next
Next
End If
End Sub
If ParamsCount > 0 Then
t = VarPtr(p1)
For i = ParamsCount - 1 To 0 Step -1
PutMem2 hGlobalOffset, asmPUSH_imm32
hGlobalOffset = hGlobalOffset + 1
GetMem4 t + i * 4, hGlobalOffset
hGlobalOffset = hGlobalOffset + 4
Next
End If
CallInterface = CallWindowProc(hGlobal, 0, 0, 0, 0)
Private Function StrFromPtrA(ByVal lpszA As Long, Optional nSize As Long = 0) As String
Dim s As String, bTrim As Boolean
If nSize = 0 Then
nSize = lstrlenA(lpszA)
bTrim = True
End If
s = String(nSize, Chr$(0))
CopyStringA s, ByVal lpszA
If bTrim Then s = TrimNULL(s)
StrFromPtrA = s
End Function
Private Function TrimNULL(ByVal str As String) As String
If InStr(str, Chr$(0)) > 0& Then
TrimNULL = Left$(str, InStr(str, Chr$(0)) - 1&)
Else
TrimNULL = str
End If
End Function
Public Function GetAllInstances() As Collection
Dim pROT As Long, pEnumMoniker As Long, pMoniker As Long, pBindCtx As Long
Dim ret As Long, nCount As Long, CheckForInstance As Boolean, Key As String
Dim pName As Long, RegisteredName As String, ExcelApp As Application
RegisteredName = StrFromPtrW(pName)
If InStr(LCase(RegisteredName), "book") Then
CheckForInstance = True
Else
Select Case Right(RegisteredName, 3)
Case "xla", "slk", "dif", "csv", "txt", "prn", "dbf", "wq1", "wks", "wk1", "wk3", "wk4", "xlw", "xls", "xlt", "htm", "mht", "xml"
CheckForInstance = True
End Select
Select Case Right(RegisteredName, 5)
Case ".html", "mhtml"
CheckForInstance = True
End Select
End If
If CheckForInstance Then
CheckForInstance = False
If ParentIsExcel(RegisteredName, ExcelApp) Then
If GetAllInstances Is Nothing Then Set GetAllInstances = New Collection
Key = CStr(ObjPtr(ExcelApp))
If Not InstanceAlreadyCollected(GetAllInstances, Key) Then
GetAllInstances.Add ExcelApp, Key
End If
End If
End If
CallInterface pMoniker, unk_Release, 0
CoTaskMemFree pName
Wend
CallInterface pEnumMoniker, unk_Release, 0
CallInterface pBindCtx, unk_Release, 0
CallInterface pROT, unk_Release, 0
Exit Function
Private Function ParentIsExcel(ByVal RegisteredName As String, ExcelApp As Application) As Boolean
On Error Resume Next
Set ExcelApp = GetObject(RegisteredName).Parent
If ExcelApp.Name = "Microsoft Excel" Then
ParentIsExcel = True
End If
Dim sp() As String
For i = 1 To Workbooks.Count
Workbooks(i).Activate
nn = Workbooks(i).Name
ReDim sp(Worksheets.Count + 1)
kk = Worksheets.Count
For j = 1 To Worksheets.Count
Worksheets(j).Activate
sp(j) = ActiveSheet.Name
Next j
Workbooks(boob).Activate
Range("A1").Offset(i, 0).Value = nn
For k = 1 To kk
Range("A1").Offset(i, k).Value = sp(k)
Next k
Читайте также: