Загрузить изображение с листа - PullRequest
0 голосов
/ 19 мая 2018

У меня есть пользовательская форма Excel, настроенная на бросание 6-гранных кубиков и представление результатов.Когда пользователь нажимает командную кнопку, я генерирую случайное число от 1 до 6, и затем я хотел бы, чтобы в форме пользователя отображалось изображение соответствующего броска костей.У меня есть изображения / формы игральных костей (например, dice_1, dice_2 и т. Д.), Помещенные в рабочую таблицу под названием «Inventory».Я получаю «Ошибка времени выполнения 13: несоответствие типов», когда я пытаюсь выполнить следующий код, и ошибка возникает в команде LoadPicture.Я понимаю, что у меня нет структуры If, необходимой для выбора рисунка, соответствующего броску костей, но этого достаточно просто добавить, как только я выясню синтаксис загрузки изображения.Предложения?

 Private Sub btnRollDice_Click()
 Dim DiceNum As Integer

     Randomize
     DiceNum = Int((6 * Rnd) + 1)     
     pic1stDie.Picture = LoadPicture(Worksheets("Inventory").Shapes("dice_1"))
 End Sub

1 Ответ

0 голосов
/ 19 мая 2018

Самый простой способ выяснить, как программно реплицировать функциональные возможности Excel, - это записать макрос при выполнении задачи вручную, а затем остановить запись и проверить созданный для вас VBA с корректировкой по мере необходимости.

  1. Запись макроса:

    • Разработчик> Запись макроса> OK
  2. Выполнить задачу вручную:

    • Вставить> Изображение> выбрать изображение
      (или, как вы показываете эти изображения)
  3. Остановить запись:

    • Разработчик> Стоп
  4. Проверьте VBA, сгенерированный для вас:

    • Разработчик> Макросы> выберите макрос> Редактировать
  5. ... при необходимости:

Выполните следующие действия gДля меня этот код был написан следующим образом:

ActiveSheet.Pictures.Insert("C:\{myPath}\{myFile}.jpg").Select

Чтобы получить максимальную пользу от изучения этой задачи, уделите время Google каждой из команд, которые она использует.Я бы добавил «excel msdn» в конец моего поискового запроса, ограничив тем самым результаты официальной документацией Microsoft Developer Network.

Небольшой метод проб и ошибок также имеет большое значение (после резервного копирования, конечно), именно так я впервые выяснил, что многие из Select и Activate методов, которыеДобавления Macro Recorder можно безопасно удалить.

В приведенном выше примере завершенный код может выглядеть следующим образом:

Sub btnRollDice_Click()
    Dim DiceNum As Integer
    Randomize
    DiceNum = Int((6 * Rnd) + 1)
    ActiveSheet.Pictures.Insert ("C:\{myPath}\myDice" & DiceNum & ".jpg")
End Sub

Если это просто вопрос отображения того же набора изображений, вы также можетерасположите все изображения (фигуры) в правильном месте (даже в «одном и том же месте», друг над другом) и установите для свойства Visible фигуры значение True / False, если необходимо, например:

ActiveSheet.Shapes("My Die 4").Visible = False 'hides this image
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...