Excel 2010 VBA изображение логотипа переключатель подкачки - PullRequest
3 голосов
/ 01 сентября 2011

Вставьте несколько изображений логотипа (одинакового размера) на лист ресурсов.Нужен способ, позволяющий пользователям легко выбирать, какую компанию они хотят, и чтобы этот логотип заменил логотип по умолчанию в верхнем левом углу нескольких листов.

Хотите использовать раскрывающееся меню, раньше использовали динамически с отличными результатами.Выпадающий список может быть в форме пользователя или только на панели инструментов.Я уже выглядел как складывающиеся логотипы и пробовал переключение оси z, но Excel, похоже, не поддерживает это.Я также пробовал .Replace и .Copy.

Опять же, логотипы уже вставлены в скрытый лист ресурсов, поэтому я не хочу, чтобы пользователи охотились за каталогом изображений и не полагались на интернет.подключение для получения изображения (иногда они работают в автономном режиме).Изображение по умолчанию уже размещено в верхнем левом углу, просто нужен способ сопоставить их (текстовый) выбор компании с соответствующим изображением / именем логотипа, а затем переключить старый логотип на новый на одной странице, которую я указываю, на той жеверхний левый угол.

Редактировать:

Вот путаница с тем, что я пробовал до сих пор, различные строки без комментариев в разное время, и на данный момент некоторые строки действительно не имеют смысла вкак это представлено.Полагаю только для уличных кредитов.Я просто пытаюсь выяснить одну маленькую особенность, не прося никого написать мою программу для меня (что является большой разницей в объеме):

Private Sub CompanySelectComboBox_Change()
    If CompanySelectComboBox.Value <> "Select a company" Then
        ' select logo here Sheets(Sheets("TaskNew").Index + TaskSheetsComboBox.ListIndex + 1).Activate
    'Private Sub TaskSheetsComboBox_Click()
    'If TaskSheetsComboBox.Value <> "Go directly to a yellow task sheet" Then
     '   Sheets(Sheets("TaskNew").Index + TaskSheetsComboBox.ListIndex + 1).Activate
    'End If
    'End Sub
        MsgBox CompanySelectComboBox.Value
        MsgBox CompanySelectComboBox.ListIndex
        Image("Logo").Replace Image("Logo"), Sheets("Config").Image("Logo2")
        'Logo.Select
        ' another possibility:
        ' LogoPic.Picture = LoadPicture(Fname)
        ' another possibility:
        'Sheets("Configs").Image("Logo").Copy Before:=Sheets("TaskEnd")
        ' another possibility:
            'CodeNames of Sheets
            'Sheets("Configs").Shapes("Picture 1").Copy
            'Sheets("Dashboard").Range("A1").PasteSpecial
    Else
        ' user didn't select a company, so just keep default (Generic) for now
    End If
End Sub

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Ну, после вашего объяснения я изменил -1 на +1. Давайте разберем проблему на части.

Во-первых, на листе ресурсов разместите свои изображения в столбце B. Задайте для каждого изображения a (название компании) в столбце A. Вы можете отрегулировать высоту строки, чтобы каждое изображение вписывалось в свой собственный ряд.

Тогда это пример того, как вы связываете имена с этими картинками:

Dim sh As Worksheet, pic As Shape
Set sh = ThisWorkbook.Worksheets("Pictures")
For Each pic In sh.Shapes
    If pic.Type = msoPicture Then
        Debug.Print pic.TopLeftCell.Cells(1, 0) ' print the company name
    End If
Next

Теперь вы можете создать поле со списком или диалоговое окно пользователя, спросить пользователя, какая компания ему нужна, и позволить ему выбрать имя. Вот пример функции для копирования изображения с заданным именем в буфер обмена:

Function CopyLogoToClipboard(picName As String) As Boolean
    Dim sh As Worksheet, pic As Shape
    Set sh = ThisWorkbook.Worksheets("Pictures")
    For Each pic In sh.Shapes
        If pic.Type = msoPicture And pic.TopLeftCell.Cells(1, 0) = picName Then
            pic.Copy
            CopyLogoToClipboard = True
            Exit Function
        End If
    Next
    CopyLogoToClipboard = False
End Function

(не забудьте проверить возвращаемое значение при его использовании).

Теперь последняя часть - вставить логотип в те места, где вы хотите. Например, поместив его в верхний левый угол на активном листе:

ActiveSheet.Paste
Set pic = Selection.ShapeRange(1)
pic.Top = 0
pic.Left = 0

Надеюсь, это поможет.

1 голос
/ 01 сентября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...