Ir ao conteúdo
  • Cadastre-se

Marcus Casanova Nogueira

Membro Júnior
  • Posts

    19
  • Cadastrado em

  • Última visita

posts postados por Marcus Casanova Nogueira

  1. Minoso,

     

    Ele executa o for todo. Se eu pedir pra abir 32 programas, ele vai abrir uma atras da outra, ficando com 32 paginas abertas. Esse problema até pode ser contornável se o usuário tiver tempo pra deixar o pc dedicado a esses programas haha 

     

    A maneira que achei pra sub não continuar foi colocar um MSGBOX. Isso porque o proximo passo da sub leria os dados obtidos pelos .exe abertos. como eles abrem rápido e a rotina continuava, ou seja, ja tentava ler os dados desses .exe, eles estavam em branco pois nao tinham rodado ainda. Agora, o passo seguinte da sub só é executado quando o botao do msgbox é apertado. Não é a solução mais prática, pois o usuário precisa estar atento ao fim dos .exe. Mas por enquanto é a solução que encontrei hehe

     

    Abraços

  2. Olá (novamente), pessoal!

     

    Estou criando uma macro que executa um .exe. É um arquivo simples, que faz alguns calculos. No entanto, este programa, quando acaba seus calculos, exige que a tecla "ENTER" seja apertada para fecha-lo (ou simplesmente clicar no "X" da aba).

     

    Meus problemas: Pretendo abrir vários arquivos desses por vez (o usuário escolheria essa quantidade); -->> atualmente só consigo abrir todos ao mesmo tempo (mais de 30, por exemplo, o que fica complicado pro pc realizar);

                                Abertos esses programas, preciso saber como fecha - los depois. No entanto, só posso fecha-los depois que o programa acabar de rodar ou os cálculos não convergirem.

     

    o código que estou usando é esse:

    Const SW_SHOW = 1Const SW_SHOWMAXIMIZED = 3Public Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" _  (ByVal hwnd As Long, _   ByVal lpOperation As String, _   ByVal lpFile As String, _   ByVal lpParameters As String, _   ByVal lpDirectory As String, _   ByVal nShowCmd As Long) As Long   Sub Rodar.exe()  Dim RetVal As Long      For i = 1 To range("a1") Step 1    nome = i    On Error Resume Next    RetVal = ShellExecute(0, "open", "C:\Users\marcus\Desktop\" & nome & "\arquivo.exe", "", _                        "C:\Users\marcus\Desktop\" & nome, SW_SHOWMAXIMIZED)next iEnd sub    

    Pensei em usar um delay ou algo do tipo, mas não consegui usar os comando que achei na net. (por exemplo: ele vai abrindo até " if  i =múltiplo de 8 then delay 10 minutos, else, next i). Pra fechar ja tentei usar windows("tanana").close mas não deu certo.

     

    Abraços

    Marcus

     

  3. Minoso, mesmo deixando o código assim:

    Sub ExecutarSalvarTXT()Dim NovoArquivoXLS As WorkbookDim nome As StringApplication.DisplayAlerts = FalseSheets("asa.in").Selectnome = Cells(1, 1).Value            'Cria um novo arquivo excel        Set NovoArquivoXLS = Application.Workbooks.Add        ActiveWorkbook.SaveAs ("C:\Users\marcus\Desktop" & "\" & "1"), xlOpenXMLWorkbookMacroEnabled    'Copia a planilha para o novo arquivo criado        Windows("kkk.xlsm").Activate        Sheets("asa.in").Select        Sheets("asa.in").Copy Before:=Workbooks("1.xlsm").Sheets(1)        Windows("1.xlsm").Activate    'Salva o arquivo       ActiveWorkbook.SaveAs Filename:="C:\Users\marcus\Desktop\USP\AERODESIGN\MIKE 2015\ASAS\" & nome, FileFormat:=xlTextWindows, ConflictResolution:=False               Set NovoArquivoXLS = Nothing                  End Sub

    ainda a aba "asa.in" da pasta "kkk.xlsm" continua sendo excluida. Será que isso tem a ver com o comando "Sheets("asa.in").Copy Before:=Workbooks("1.xlsm").Sheets(1)" ?

     

    Abraço

  4. Minoso,

    Sub ExecutarSalvarTXT()Dim NovoArquivoXLS As WorkbookDim nome As StringApplication.DisplayAlerts = FalseSheets("asa.in").Selectnome = Cells(1, 1).Value            'Cria um novo arquivo excel    Set NovoArquivoXLS = Application.Workbooks.Add    ActiveSheet.Name = nome    ActiveWorkbook.SaveAs ("C:\Users\marcus\Desktop" & "\" & nome), xlOpenXMLWorkbookMacroEnabled    'Copia a planilha para o novo arquivo criado        Windows("kkk.xlsm").Activate        Sheets("asa.in").Select        Sheets("asa.in").Copy Before:=Workbooks("1.xlsm").Sheets(1)        Windows("1.xlsm").Activate        'Salva o arquivoActiveWorkbook.SaveAs Filename:="C:\Users\marcus\Desktop\\" & nome, FileFormat:=xlTextWindows, ConflictResolution:=FalseEnd Sub

    o código esta assim agora. Ele não abre mais o 1.txt nem fecha mais a o aquivo kkk.xlsm, mas ele exclui a aba "asa.in" do "kkk.xlsm". Você sabe o porque?

     

    Obrigado

  5. Estou usando esse código:

    Sub ExecutarSalvarTXT()Dim NovoArquivoXLS As WorkbookDim nome As StringApplication.DisplayAlerts = FalseSheets("asa.in").Selectnome = Cells(1, 1).Value            'Cria um novo arquivo excel    Set NovoArquivoXLS = Application.Workbooks.Add    ActiveSheet.Name = nome    ActiveWorkbook.SaveAs ("C:\Users\marcus\Desktop" & "\" & nome), xlOpenXMLWorkbookMacroEnabled    'Copia a planilha para o novo arquivo criado        Windows("kkk.xlsm").Activate        Sheets("asa.in").Select        Sheets("asa.in").Copy Before:=Workbooks("1.xlsm").Sheets(1)            'Salva o arquivoActiveWorkbook.SaveAs Filename:="C:\Users\marcus\Desktop\" & nome, FileFormat:=xlTextWindows, ConflictResolution:=False        NovoArquivoXLS.Close    Set NovoArquivoXLS = Nothing    Application.DisplayAlerts = False        ActiveWindow.SelectedSheets.Delete      End Sub

    No entanto, o arquivo original (kkk.xlsm) fecha quando o nome.txt é criado e esse nome.txt abre (como uma planilha do excel). Queria saber como faço para criar o txt e nada acontecer (não abrir o txt e nem fechar o original (kkk.xlsm))

     

    Obrigado!

    Marcus

  6. Olá novamente, pessoal!

     

    Estou tentando aprender a copiar e colar uma pasta (e todos os documentos que estiverem dentro dela)  através de VBA. No entanto, como vou copiar essa pasta no mesmo local da "original", gostaria de alterar o nome de acordo com os nomes em uma planilha. Para começar, estou usando o seguinte código:

     

    Sub copiarpasta()Dim fso As New FileSystemObjectDim name As StringFor i = 1 To 5Cells(i, 1).Value = iname = Cells(i, 1).Valuefso.CopyFolder "C:\Users\marcus\Desktop\pastadesejada", "C:\Users\marcus\Desktop\ && name"Next iEnd Sub

    No entanto, quando vou rodar a macro, recebo a seguinte mensagem: Erro de compilação : tipo definido pelo usuário não definido.

    Já procurei em diversos sites e a única coisa que encontrei foi para ir em referências e adicionar algumas opções, mas nada até agora adiantou. Também tenho a dúvida de como fazer o nome contido na célula x virar parte do nome da pasta!

     

    Obrigado!

    Marcus

     
  7. E aí, Pessoal!

     

    Estou com um problema na minha planilha: Tenho vários for (um dentro do outro), mas gostaria que caso uma situação não acontecesse, o for pulasse para a próxima iteração. Por exemplo:

     

    For x to y 

    For k to n

    For j to p

     

    if tanana then tanana

     

    end if

     

    .

    .

    .

     

     

    if Cells(1,2) = 0  then não fazer nada (pular para o próximo for)

     

    end if

     

    next j

    next k

    next x

     

    end 

    end 

    end 

     

    Valeu!

  8. Sub SalvarComoTXT()
        UserForm1.Show
    End Sub
     
    Sub ExecutarSalvarTXT(mPlan As Worksheet, mPathSave As String)
    Dim NovoArquivoXLS As Workbook
     
     
        Set NovoArquivoXLS = Application.Workbooks.Add
     
     
        mPlan.Copy Before:=NovoArquivoXLS.Sheets(1)
     
     
        ActiveWorkbook.SaveAs Filename:=Application.GetSaveAsFilename
     
        
        MsgBox "Novo arquivo salvo em: " & mPathSave & "\" & mPlan.Name & ".txt", vbInformation
     
    End Sub

    Já resolvi, Minoso!

     

    Tinha apagado o   "NovoArquivoXLS.Close" do código!

     

    Obrigado pela Ajuda!

     

    Abraço

  9. Pessoal,

     

    estou utilizando o código desse site para exportar as abas para TXT (http://www.exceldoseujeito.com.br/2010/12/22/macro-para-salvar-uma-planilha-xls-em-txt/) :

     

    Módulo1

    01 Sub SalvarComoTXT()
    02     UserForm1.Show
    03 End Sub
    04  
    05 Sub ExecutarSalvarTXT(mPlan As Worksheet, mPathSave As String)
    06 Dim NovoArquivoXLS As Workbook
    07  
    08     'Cria um novo arquivo excel
    09     Set NovoArquivoXLS = Application.Workbooks.Add
    10  
    11     '
    Copia a planilha para o novo arquivo criado
    12     mPlan.Copy Before:=NovoArquivoXLS.Sheets(1)
    13  
    14     'Salva o arquivo
    15     Application.DisplayAlerts = False
    16     NovoArquivoXLS.SaveAs mPathSave & "\" & mPlan.Name & ".txt", _
    17         FileFormat:=xlText, CreateBackup:=False
    18  
    19     NovoArquivoXLS.Close
    20     Set NovoArquivoXLS = Nothing
    21     Application.DisplayAlerts = True
    22  
    23     MsgBox "Novo arquivo salvo em: " & mPathSave & "\" & mPlan.Name & ".txt", vbInformation
    24  
    25 End Sub

    UserForm1

    01 Private Sub CommandButton1_Click()
    02  
    03     'Chama a rotina para salvar como txt
    04     '
    Será salvo um novo arquivo txt com base na planilha seleciona na lista de opções
    05     Call ExecutarSalvarTXT(Sheets(lstPlanilhas.Text), ThisWorkbook.Path)
    06  
    07     Unload Me   'Fecha o form
    08  
    09 End Sub
    10  
    11 Private Sub UserForm_Initialize()
    12  
    13     '
    Chama a rotina para preencher a lista das planilha disponíveis no arquivo
    14     Call PreencheLista
    15  
    16 End Sub
    17  
    18 Private Sub PreencheLista()
    19 Dim sht As Worksheet
    20  
    21     lstPlanilhas.Clear
    22  
    23     For Each sht In ThisWorkbook.Worksheets
    24         If sht.Name <> "Principal" Then 'Não exibe a planilha Principal
    25             lstPlanilhas.AddItem sht.Name
    26         End If
    27     Next sht
    28  
    29 End Sub

     

     

    O código é excelente para o que eu preciso. No entanto, queria saber no que devo alterá-lo para que ele não salve automaticamente o arquivo exportado na área de trabalho e com o nome da aba,como ele faz. Queria escolher o destino no arquivo a cada exportação ( e seu nome).

     

    Abraços

    Marcus

     

  10. Pessoal,

     

    estou utilizando o código desse site para exportar as abas para TXT (http://www.exceldoseujeito.com.br/2010/12/22/macro-para-salvar-uma-planilha-xls-em-txt/) :

     

    Módulo1

    01 Sub SalvarComoTXT()02     UserForm1.Show03 End Sub04  05 Sub ExecutarSalvarTXT(mPlan As Worksheet, mPathSave As String)06 Dim NovoArquivoXLS As Workbook07  08     'Cria um novo arquivo excel09     Set NovoArquivoXLS = Application.Workbooks.Add10  11     'Copia a planilha para o novo arquivo criado12     mPlan.Copy Before:=NovoArquivoXLS.Sheets(1)13  14     'Salva o arquivo15     Application.DisplayAlerts = False16     NovoArquivoXLS.SaveAs mPathSave & "\" & mPlan.Name & ".txt", _17         FileFormat:=xlText, CreateBackup:=False18  19     NovoArquivoXLS.Close20     Set NovoArquivoXLS = Nothing21     Application.DisplayAlerts = True22  23     MsgBox "Novo arquivo salvo em: " & mPathSave & "\" & mPlan.Name & ".txt", vbInformation24  25 End Sub

    UserForm1

    01 Private Sub CommandButton1_Click()02  03     'Chama a rotina para salvar como txt04     'Será salvo um novo arquivo txt com base na planilha seleciona na lista de opções05     Call ExecutarSalvarTXT(Sheets(lstPlanilhas.Text), ThisWorkbook.Path)06  07     Unload Me   'Fecha o form08  09 End Sub10  11 Private Sub UserForm_Initialize()12  13     'Chama a rotina para preencher a lista das planilha disponíveis no arquivo14     Call PreencheLista15  16 End Sub17  18 Private Sub PreencheLista()19 Dim sht As Worksheet20  21     lstPlanilhas.Clear22  23     For Each sht In ThisWorkbook.Worksheets24         If sht.Name <> "Principal" Then 'Não exibe a planilha Principal25             lstPlanilhas.AddItem sht.Name26         End If27     Next sht28  29 End Sub

     

     

    O código é excelente para o que eu preciso. No entanto, queria saber no que devo alterá-lo para que ele não salve automaticamente o arquivo exportado na área de trabalho como ele faz. Queria escolher o destino no arquivo a cada exportação.

     

    Abraços

    Marcus

  11. Obrigado por responder, Minoso!
     
    Desculpe a ignorância, mas não entendi ao certo o que o comando activecell.column faz. Pra questão da célula estar pintada de vermelho ou não, pensei em colocar um IF pra isso. Algo tipo:

     

     

    For i = 1 To contacoluna
     

    If Cells(1,n).interior.color = rgbred then 
     

    Sheets.Add After:=ActiveSheet

    Sheets("Matriz").Select
    nome = ActiveCell.Offset(0, contacoluna - i).Value
    ActiveSheet.Next.Select
    ActiveSheet.Name = nome
    Sheets("Matriz").Select

    Next i

     

    end if

    End Sub

     

    Mas não sei se funcionaria corretamente.

     

    Abraços

     

    PS: Aparentemente deu certo este IF dentro do seu código. Mas se puder explicar como funciona o Activecell.column eu agradeceria muito!

     

    Abraços

     

    PS2: Modifiquei um pouco seu código pois em outra macro ja obtinha o número de células ocupadas na linha 1 (o Range("a24") :

     

    Sub Nova_Aba()
     
             Dim nome As String
     
          Application.ScreenUpdating = False
        
     
       For i = 1 To Range("a24")
        
        If Cells(1, i).Interior.Color = rgbRed Then
        
     
            Sheets.Add After:=ActiveSheet
        
     
            Sheets("Plan1").Select
            nome = Cells(1, i).Value
            Range("c20").Value = nome
            ActiveSheet.Next.Select
            ActiveSheet.Name = nome
            Sheets("Plan1").Select
            
            End If
           
        Next i
     
     
    End Sub
     
    Obrigado mesmo pela Ajuda!
     
    Abraços
  12. E aí, pessoal? Tudo bem?

     

    Estou começando agora a programar em VBA e estou com dificuldade em uma parte: preciso criar novas abas de acordo com a quantidade de células pintadas de vermelho que estão na linha 1 na aba principal. Cada aba receberia o nome que estivesse nesta célula.  Resumindo: o programa tem que analisar a primeira linha da aba principal e cada vez que encontrar uma célula vermelha deve abrir uma nova aba e nomear esta aba com o texto da célula em questão.

     

    Abraços

    Marcus

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!