Как изменить электронную таблицу для США (ThisWorkbook) с немецкого (DieseArbeitsmappe)? - PullRequest
0 голосов
/ 22 сентября 2019

В нашей компании много рабочих книг, которые изначально были сохранены на немецком языке.Следовательно, переменная ThisWorkbook отсутствует.Вместо этого он называется DieseArbeitsmappe.Использование ThisWorkbook в коде приводит к ошибке VBA.

Я попытался переименовать DieseArbeitsmappe в ThisWorkbook с кодом ниже.

Private Sub RenameThisWorkbookToEnglish()
  Dim TmpWorkbook As Object

  On Error Resume Next
  'Was this saved in German?
  Set TmpWorkbook = ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe")

  If err.Number = 0 Then
    Debug.Print ("German Workbook.")
    TmpWorkbook.Module.CodeName = "ThisWorkbook"
    TmpWorkbook.Name = "ThisWorkBook"
    TmpWorkbook.CodeName = "This Workbook"
    Exit Sub
  End If

  On Error GoTo -1
End Sub

Function ErrorIsThisWorkBookBad() As Boolean
  On Error GoTo ErrLabel
  ErrorIsThisWorkBookBad = Not (ThisWorkbook.CodeName = "ThisWorkbook")
  Exit Function
ErrLabel:
  ErrorIsThisWorkBookBad = True
End Function

Я назвал этот код в Private Sub Auto_Open()

Private Sub Auto_Open()
  RenameThisWorkbookToEnglish

  If ErrorIsThisWorkBookBad Then
    Debug.Print ("Workbook Is Bad.")
  End If
End Sub

Этот код сообщает как плохой.VBE показывает модуль ThisWorkbook, но его имя по-прежнему DieseArbeitsmappe.

Несмотря на то, что Debug.Print в Auto_Open сообщает о плохом, более поздняя функция нажатия кнопки, которая использует ThisWorkbook, хороша,Затем сохраните результаты в нескольких книгах ThisWorkbook (например, ThisWorkbook, ThisWorkbook1).

Так что это отчасти работает, но не совсем.

Другие примечания: на моем компьютере установлен только английский язык,У меня нет доступа ко всем электронным таблицам, но я пишу VBA, которая будет в них вставлена.

Основной вопрос: Как изменить локализацию или ???сделать ThisWorkbook допустимой переменной?

1 Ответ

1 голос
/ 22 сентября 2019

Благодаря Storax я нашел свою ошибку.

Как отмечалось в комментариях, я получал ложное срабатывание от ErrorIsThisWorkBookBad в строке ThisWorkbook.CodeName = "ThisWorkbook", когда ThisWorkbook.CodeName было DieseArbeitsmappe.

Я переписал ErrorIsThisWorkBookBad (ниже) и протестировал на поврежденной книге (т.е. книге с ThisWorkbook и ThisWorkbook1, как , это ).Поврежденная книга действительно сообщала об ошибке правильно.

Проблема решена.

Function ErrorIsThisWorkBookBad() As Boolean
  On Error GoTo ErrLabel

  'Dummy call just to test if ThisWorkbook creates error.
  If ThisWorkbook.Name <> "" Then
  End If

  'Made it here, there is no error and ThisWorkbook is valid.
   ErrorIsThisWorkBookBad = False

   Exit Function
ErrLabel:
  ErrorIsThisWorkBookBad = True
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...